"""
231. 2 的幂
简单
相关标签
premium lock icon
相关企业
给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。

如果存在一个整数 x 使得 n == 2x ，则认为 n 是 2 的幂次方。



示例 1：

输入：n = 1
输出：true
解释：20 = 1
示例 2：

输入：n = 16
输出：true
解释：24 = 16
示例 3：

输入：n = 3
输出：false


提示：

-231 <= n <= 231 - 1


进阶：你能够不使用循环/递归解决此问题吗？
"""


class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n<=0:
            return False
        return n.bit_count()==1
        # length = n.bit_length()
        # t = (1<<(length+1)) -1
        # print(t)
        # return n&t == t
    def isPowerOfTwo_res1(self, n: int) -> bool:
        return n > 0 and n & (n - 1) == 0

if __name__ == '__main__':
    print(Solution().isPowerOfTwo(1))
    print(Solution().isPowerOfTwo(16))
    print(Solution().isPowerOfTwo(3))
    print(Solution().isPowerOfTwo(3))